﻿/*
体绘制引擎系列之三 定义体数据模型_小半君_新浪博客
http://blog.sina.com.cn/s/blog_61322d7701017b6r.html
*/
#pragma once
//开始定义我们的容器
#include"GL\glut.h"


class AbstractScene; //这个叫前向声明

class GLUTSceneContainer
{
public:
	static GLUTSceneContainer*GetMainWindow();

	void SetSize(int width,int height);

	void GetSize(int &width,int &height) const;

	void SetTitle(const char*title);

	const char* GetTitle() const;

	//下面两个函数是新加的
	void SetScene(AbstractScene*scene);
	AbstractScene* GetScene() const;

	//窗口创建的一大串都放在这里了哦！
	void Create(int posX=0,int posY=0);



private:
	//写单例的时候，构造和析构要放在private里哦！
	GLUTSceneContainer();
	virtual~GLUTSceneContainer();

	//回调函数的实现，稍稍做一些初步的处理，其他的将来留给场景来做，我们还没有场景呢，所以先留些空白吧。
	static void s_display();

	static void s_keyboard ( unsigned char key, int x, int y);

	static void s_speckey(GLint key, GLint x, GLint y);

	static void s_reshape(int width, int height);

	static void s_mouse(int button, int state, int x, int y);

	static void s_motion(int x, int y);

	static GLUTSceneContainer*s_pMainWindow;
	static void Exit(int i);

	char m_Title[1024];
	int m_Size[2];
	bool m_FullScreen;
	int m_WindowID;

	//增加一个成员
	AbstractScene *m_Scene;
};
